/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.cardapiodigital.data;

import br.com.cardapiodigital.database.ConnectionManager;
import br.com.cardapiodigital.entity.Estados;
import br.com.cardapiodigital.exception.CardapioDigitalException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author egberto
 */
public class EstadosData extends GenericData<Estados> {

    @Override
    public void salvar(Estados entity) throws CardapioDigitalException {
      
        PreparedStatement pstmt = null;
        Connection conn = null;
        
        String sql = "INSERT INTO estados (uf,nome) values (?,?)";    
        
        try{
            conn = ConnectionManager.getConexao();
            pstmt = conn.prepareStatement(sql);
            // preenche os valores ?,?
            pstmt.setString(1, entity.getUf());
            pstmt.setString(2, entity.getNome());           
            
            pstmt.execute();
            
        }catch(SQLException ex){
            Logger.getLogger(EstadosData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn, pstmt);
        }
    }

    @Override
    public void atualizar(Estados entity) throws CardapioDigitalException {
        PreparedStatement pstmt = null;
        Connection conn = null;
        
        String sql = "UPDATE estados SET nome = ? WHERE uf = ?";    
        
        try{
            conn = ConnectionManager.getConexao(); 
            pstmt = conn.prepareStatement(sql);
            // preenche os valores ?,?
            pstmt.setString(1, entity.getNome());
            pstmt.setString(2, entity.getUf());           
            
            pstmt.execute();
            
        }catch(SQLException ex){
            Logger.getLogger(EstadosData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn, pstmt);
        }
    }    

    @Override
    public void excluir(String entityId) throws CardapioDigitalException {
        
        PreparedStatement pstmt = null;
        Connection conn = null;
        
        String sql = "DELETE FROM estados WHERE uf=?";    
        
        try{
            conn = ConnectionManager.getConexao(); 
            pstmt = conn.prepareStatement(sql);
            // preenche os valores ?,?
            pstmt.setString(1, entityId);           
            
            pstmt.execute();
            
        }catch(SQLException ex){
            Logger.getLogger(EstadosData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn, pstmt);
        }
        
    }

    @Override
    public List<Estados> buscarTodos() throws CardapioDigitalException {
        String sql = "SELECT * FROM estados ORDER BY uf ASC";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Estados> listaEstados = new ArrayList<Estados>();
        
        try{
            conn = ConnectionManager.getConexao();
            stmt =  conn.createStatement();
            rs = stmt.executeQuery(sql);
            
            while(rs.next()){
                String uf = rs.getString("uf");
                String nome = rs.getString("nome");
                listaEstados.add(new Estados(uf,nome));
            }
            
            return listaEstados;
        
        }catch(SQLException ex){
            Logger.getLogger(EstadosData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn,stmt,rs);
        }
        
    }

    @Override
    public Estados obtem(String entityId) throws CardapioDigitalException {
        String sql = "SELECT * FROM estados WHERE uf='" + entityId + "'";        
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        Estados estado = null;
        
        try{
            conn = ConnectionManager.getConexao();
            stmt =  conn.createStatement();  
            rs = stmt.executeQuery(sql);
            
            if(rs.next()){
                String uf = rs.getString("uf");
                String nome = rs.getString("nome");
                estado = new Estados(uf,nome);
            }
            
            return estado;
        
        }catch(SQLException ex){
            Logger.getLogger(EstadosData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query " + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn,stmt,rs);
        }
    }
 
    
}
